// 1.下载并导入koa的第三方包，注意导入的Koa是一个类
const Koa = require('koa');
// 5.下载并导入koa-roter的第三方包，注意导入的Koa-router是一个类
// const Router = require('koa-router');
// const router = new Router();
const bodyParser = require('koa-bodyparser');
// 调用koa-bodyparser包


// 或者缩写
// const router = require('koa-router')();
// 2.创建一个koa服务app
const app = new Koa();
app.use(bodyParser());

// 读写cookie
app.use((ctx, next) => {
    console.log(ctx.cookies.get('views')||0)
    ctx.cookies.set('t', Date.now(), {
        maxAge:1000*60
    })
    let name = new Buffer('易俊').toString('base64');
    ctx.cookies.set('name', name, {
        maxAge:1000*60
    })
    let n = parseInt(ctx.cookies.get('views')||0)
    console.log('n: ', n);
    ctx.cookies.set('views',++n)
    next()
})

// 配置session
const session = require('koa-session');
app.keys = ['some secret hurr'];
const CONFIG = {
   key: 'koa:sess',   //cookie key (default is koa:sess)
   maxAge: 86400000,  // cookie的过期时间 maxAge in ms (default is 1 days)
   overwrite: true,  //是否可以overwrite    (默认default true)
   httpOnly: true, //cookie是否只有服务器端可以访问 httpOnly or not (default true)
   signed: true,   //签名默认true
   rolling: false,  //在每次请求时强行设置cookie，这将重置cookie过期时间（默认：false）
   renew: false,  //(boolean) renew session when session is nearly expired,
};
app.use(session(CONFIG, app));

app.use((ctx, next) => {
    // 设置
    ctx.session.a = 'yj';
    next();
})
app.use((ctx, next) => {
    // 获取
    console.log(ctx.session.a);
    next();
})

// 11.托管静态资源
const kosStatic = require('koa-static');
app.use(kosStatic('./mystatic'))
// 或者以 绝对路径 的方式托管静态资源
// app.use(kosStatic(__dirname + '/mystatic'))
// 注意：
// 1. 可以配置多个托管静态资源的中间件
// 2.访问静态资源,优先去mystatic文件夹下匹配,匹配不到,内部会有next 指向下一个中间件

// 12导入 koa-views
const views = require('koa-views');
// 注册中间件，选择模板文件夹和模板文件类型
app.use(views('mystatic'), {
    // views里面放的是托管的模板文件地址，可以是绝对、相对等路径
    extension: 'ejs'
    // extension: 'ejs' 为什么要routerhandler中还依然要指定myejs.ejs后缀呢？才能入取ejs文件，不然直接获取html文件了
    // map: { html: 'ejs' },
    // map: { html: 'ejs' }可以不加后缀，但为什么要routerhandler中传递 数据，html的ejs无法读取数据？
    
    // 以上两种方式都可以让koa读取.ejs文件做为模板
})
// app.use(async (ctx, next) => {
//     console.log('111')
//     next()
// })
// 注册中间件，指定渲染模板和渲染数据
// app.use(async ctx => {
//     await ctx.render('myindex.ejs', { flag:true, message: '我的渲染ejs', data: [{name:'yj',age:2},{name:'zd',age:4},{name:'yyx',age:4},{name:'yjy',age:6}]})
// })

// app.use(views('mystatic'), {
//     extension:'ejs'
// })

// app.use(async (ctx,next) => {
//     await ctx.render('myindex.html', {message:'我的渲染ejs'})
//     await next()
// })


// app.use(ctx => {
//     ctx.response
//     ctx.request
//     console.log(ctx.method)
//     console.log(ctx.url)
//     ctx.body = {
//         status:0,
//         message:'http://127.0.0.1---访问成功！'
//     }
// })

// // 注册一个地址为/get的get接口
// router.get('/get', ctx => {
//     console.log(ctx.query);
//     ctx.status = 200,
//         ctx.body = {
//         message:'get请求成功！'
//     }
// })
// // 注册一个地址为/post的post接口
// router.post('/post', ctx => {
//     ctx.status = 200,
//         ctx.body = {
//         message:'post请求成功！'
//     }
// })

// // 查询字符串
// router.get('/get', ctx => {
//     ctx.body = {
//         message: ctx.query
//     }
// })
// // 动态参数
// router.get('/get/:name/:age', ctx => {
//     ctx.body = {
//         message: ctx.params
//     }
// })
// // post请求
// router.post('/post', ctx => {
//     console.log(ctx.request.body)
//     ctx.body = {
//         message: ctx.request.body
//     }
// })

app.use(async (ctx, next) => {
    ctx.state.yj = '易骏';
    await next()
 })
const router = require('./myrouter')

app.use(router.routes())
    .use(router.allowedMethods())

// 3.启动一个基本的koa的web服务器
app.listen(80, () => {
    console.log('http://127.0.0.1:80')
})

